package cn.wzut.edut.service;

import cn.wzut.edut.dao.inf.ClassCollege;
import cn.wzut.edut.dao.inf.Group;
import cn.wzut.edut.dao.inf.Information;
import cn.wzut.edut.dao.pojo.inf.StuInf;
import cn.wzut.edut.dao.pojo.table.PtyStuGroup;
import cn.wzut.edut.dao.pojo.table.PtyStuGroupRel;
import cn.wzut.edut.jwt.JWTUtils;
import cn.wzut.edut.pojo.StuGroupInfo;
import cn.wzut.edut.pojo.StuGroupModInfo;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 学生组服务层（未完成）
 */
@Service
public class StuGroupService {

    @Autowired
    Information information;

    @Autowired
    ClassCollege classCollege;

    @Autowired
    ClientService clientService;

    @Autowired
    Group group;

    /**
     * 根据管理者id获取全部学生组列表
     *
     * @param token
     * @return
     */
    public List<PtyStuGroup> getGroupList(String token){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 根据用户id获取教师id
            String id = information.selectTeacherInId(userId).getId();
            // 根据教师id获取用户组列表
            return group.selectStuGroupInTeacher(id);
        }
        return null;
    }

    /**
     * 根据管理者id获取指定个数指定页的学生组列表
     *
     * @param token
     * @return
     */
    public List<PtyStuGroup> getGroupListByPage(String token, int page, int num){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 根据用户id获取教师id
            String id = information.selectTeacherInId(userId).getId();
            // 根据教师id获取用户组列表
        }
        return null;
    }

    /**
     * 获取全部学生组列表
     *
     * @param token
     * @return
     */
    public List<PtyStuGroup> getAllGroupList(String token){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            // 获取全部用户组列表
            return group.selectAllStuGroup();
        }
        return null;
    }

    /**
     * 获取指定个数指定页的学生组列表
     *
     * @param token
     * @return
     */
    public List<PtyStuGroup> getAllGroupListByPage(String token, int page, int num){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            // 获取全部用户组列表
            return group.selectAllStuGroup();
        }
        return null;
    }

    /**
     * 添加学生组
     * @param token
     * @return
     */
    public boolean addGroup(String token, StuGroupInfo stuGroupInfo){
        try {
            // 解析token
            DecodedJWT decode = JWTUtils.decode(token);
            // 判断是否是后台管理端发送的请求
            if (decode.getClaim("end").asString().equals("B")) {
                // 获取用户id
                String userId = decode.getClaim("userid").asString();
                // 判断用户是否拥有菜单6（学生组管理）权限
                if (clientService.selectRole(userId, "6")) {
                    // 获取教师id
                    String teacherId = information.selectTeacher(userId).getId();
                    // 学生组信息写入学生组表
                    String id = group.insertPtyStuGroup(new PtyStuGroup("1", stuGroupInfo.getGroupName(), teacherId));
                    // 更新学生学生组表
                    if (stuGroupInfo.getStus() != null) {
                        for(StuInf stu : stuGroupInfo.getStus()){
                            group.insertPtyStuGroupRel(new PtyStuGroupRel("1", stu.getId(), id));
                        }
                    }
                }
            }
        }
        catch(Exception e){}
        return false;
    }

    /**
     * 删除学生组
     * @param token
     * @return
     */
    public boolean delGroup(String token, String[] groupids) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单6（学生组管理）权限
            if (clientService.selectRole(userId, "6")) {
                for(String groupid : groupids){
                    if(!group.delPtyStuGroupInId(groupid)){
                        return false;
                    }
                }
                return true;
            }
        }
        return false;
    }

    /**
     * 修改学生组
     * @param token
     * @return
     */
    public boolean modGroup(String token, StuGroupModInfo stuGroupModInfo) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单6（学生组管理）权限
            if (clientService.selectRole(userId, "6")) {
                // 获取教师id
                String teacherId = information.selectTeacher(userId).getId();
                // 更新学生组表信息
                group.updatePtyStuGroup(new PtyStuGroup(stuGroupModInfo.getGroupId(), stuGroupModInfo.getGroupName(), teacherId));
                // 更新添加学生信息
                if(stuGroupModInfo.getAddIds() != null) {
                    for (String addId : stuGroupModInfo.getAddIds()) {
                        group.insertPtyStuGroupRel(new PtyStuGroupRel("1", addId, stuGroupModInfo.getGroupId()));
                    }
                }
                // 更新删除学生信息
                if(stuGroupModInfo.getDelIds() != null) {
                    for (String delId : stuGroupModInfo.getDelIds()) {
                        group.delPtyStuGroupRel(stuGroupModInfo.getGroupId(),delId);
                    }
                }
                return true;
            }
        }
        return false;
    }

    /**
     * 根据学生组id查询学生组信息
     * @param token
     * @return
     */
    public StuGroupInfo getGroupById(String token, String groupid) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单6（学生组管理）权限
            if (clientService.selectRole(userId, "6")) {
                // 获取学生学生组关系表记录，根据记录数组中的学生id获取学生信息
                List<StuInf> stuInfs = null;
                for (PtyStuGroupRel rel : group.selectStuGroupRelInGroup(groupid)) {
                    stuInfs.add(information.selectPtyStuInId(rel.getStuId()));
                }
                // 返回学生组表数据和该学生组下学生数据
                return new StuGroupInfo(group.selectStuGroup(groupid).getStuGroupName(), stuInfs);
            }
        }
        return null;
    }

}
